package com.hca.training.zk.javabasic.Stringtest.Stringtest;

import java.io.FileReader;
import java.io.IOException;
import java.util.*;

public class TestArray {

    public static void main(String[] arg0) {
//        transformArray();  //1.转换成数组
//        option();          //2.往List中添加10个字符串，追加完成后替换其中的第3个元素，再将这10个字符串逐个移除。
//        include();         //3.包含指定元素,或集合  4判断List中是否包含一组指定的元素中所有的内容
//        min();             //5、比较并输出两个List中不同的元素，请考虑循环次数最少最高效的实现方式。
//       forMap();          //6.Map接口的子类HashMap,Hashtable，如何遍历map中的所有元素？
        ascending();        //7.对map中的元素按key升序输出。8、判断Map中是否包含一个指定的key或value。
//        listOrmapchenge();    //9、	Iterator接口的子类，List和Map可以如何转换为Iterator?
//          property ();    //12.在Java中创建一个Properties对象，从classpath中加载一个properties文件，并打印输出所有propery的key和value。
//           Arrays();//14.自定义一个针对Integer的倒序排序规则，并使用Arrays对象和此规则对数组进行排序。
//         Arrayschengelist();
    }

    /**
     * 1.转换成数组
     */
    public static void transformArray() {
        List<String> a = new ArrayList<String>();
        a.add("1");
        a.add("2");
        String[] aa = a.toArray(new String[a.size()]);
        for (String s : aa) {
            System.out.println(s);
        }

        List<String> b = new LinkedList<String>();
        b.add("3");
        b.add("4");
        String[] bb = b.toArray(new String[b.size()]);
        for (String s : bb) {
            System.out.println(s);
        }
        List<String> c = new Vector<String>();
        c.add("5");
        c.add("6");
        String[] cc = c.toArray(new String[c.size()]);
        for (String s : cc) {
            System.out.println(s);
        }
    }

    /**
     * 2.往List中添加10个字符串，追加完成后替换其中的第3个元素，再将这10个字符串逐个移除。
     */
    public static void option() {
        List<String> a = new ArrayList<String>();
        for (int i = 0; i < 10; i++) {
            a.add("a" + i);
        }
        System.out.println(a);
        a.set(2, "sssssss");
        System.out.println(a);
        for (int i = a.size() - 1; i > 0; i--) {
            a.remove(i);
            System.out.println(a);
        }
        System.out.println(a.size());
    }

    /**
     * 3.包含指定元素
     * 4.是否包含该集合
     */
    public static void include() {
        List<String> a = new ArrayList<String>();
        for (int i = 0; i < 10; i++) {
            a.add("a" + i);
        }
        List<String> b = new ArrayList<String>();
        for (int i = 0; i < 10; i++) {
            b.add("b" + i);
        }
        System.out.println(a.contains("a1"));   // 3.是否包含该元素
        System.out.println(a.containsAll(b));   //4.是否包含该集合


    }

    /**
     * 5、	比较并输出两个List中不同的元素，请考虑循环次数最少最高效的实现方式。
     */
    public static void min() {
        List<String> a = new ArrayList<String>();
        for (int i = 0; i < 10; i++) {
            a.add("a" + i);
        }
        List<String> b = new ArrayList<String>();
        for (int i = 0; i < 9; i++) {
            b.add("a" + i);
        }
        b.set(3, "s");
        System.out.println(a);
        System.out.println(b);
        if (a.size() > b.size()) {
            for (String aa : a) {
                if (!b.contains(aa)) {
                    System.out.println(aa + "与b中元素不同");
                }
            }
        }

    }

    /**
     * 6.	Map接口的子类HashMap,Hashtable，如何遍历map中的所有元素
     */
    public static void forMap() {
        Map<Integer, String> aa = new HashMap<Integer, String>();
        for (int i = 0; i < 9; i++) {
            aa.put(i, "a" + i);
        }
        for (int key : aa.keySet()) {
            System.out.println("key:" + key + "    value:" + aa.get(key));
        }
        Map<Integer, String> bb = new Hashtable<Integer, String>();
        for (int i = 0; i < 9; i++) {
            bb.put(i, "b" + i);
        }

        for (Map.Entry<Integer, String> me : bb.entrySet()) {
            System.out.println("key:" + me.getKey() + "    value:" + me.getValue());
        }
    }

    /***
     * 7.对map中的元素按key升序输出。8.
     * ascending(上升的)
     */
    public static void ascending() {
        Map<String, String> maptest = new HashMap<String, String>();
        maptest.put("1天", "day1");
        maptest.put("2天", "day2");
        maptest.put("3天", "day3");
        maptest.put("4天", "day4");
        maptest.put("5天", "day5");
       //第8题
        System.out.println("是否包含4天的key：" + maptest.containsKey("4天"));
        System.out.println("是否包含day3的value：" + maptest.containsValue("day3"));
        Collection<String> keyset = maptest.keySet();//默认降序
        for (String s : maptest.keySet()) {
            System.out.println(s);
        }
        List<String> list = new ArrayList<String>(keyset);
        for (int i = 0; i < list.size(); i++) {
            System.out.println("key键---值: " + list.get(i) + "," + maptest.get(list.get(i)));
        }
        Collections.sort(list);//升序
        for (int i = 0; i < list.size(); i++) {
            System.out.println("key键---值: " + list.get(i) + "," + maptest.get(list.get(i)));
        }


    }

    /**
     * 9、Iterator接口的子类，List和Map可以如何转换为Iterator?
     */
    public static void listOrmapchenge() {
        List<String> a = new ArrayList<String>();
        for (int i = 0; i < 10; i++) {
            a.add("a" + i);
        }
        Iterator its = a.iterator();
        while (its.hasNext()) {
            System.out.println(its.next());
        }
        Map<Integer, String> b = new HashMap<Integer, String>();
        for (int i = 0; i < 10; i++) {
            b.put(i, "b" + i);
        }

        Iterator<Map.Entry<Integer, String>> it = b.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Integer, String> entry = it.next();
            System.out.println("key=" + entry.getKey() + "," + "value=" + entry.getValue());
        }
    }

    /**
     * 第十、十一直接写了
     * 12.在Java中创建一个Properties对象，从classpath中加载一个properties文件，并打印输出所有propery的key和value。
     */
    public static void property() {
        Properties properties = new Properties();
        try {
            System.out.println(TestArray.class.getClassLoader().getResource("").getPath());
            properties.load(new FileReader(TestArray.class.getClassLoader().getResource("config.properties").getPath()));

            String a = properties.getProperty("driver");
            System.out.println(a);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 十三直接写
     * 14.自定义一个针对Integer的倒序排序规则，并使用Arrays对象和此规则对数组进行排序。
     */
    public static void Arrays() {
        Integer[] arr = {1, 2, 3, 4, 5, 6};
        Arrays.sort(arr, new Comparator<Object>() {
            public int compare(Object arg0, Object arg1) {
                Integer a = (Integer) arg0;
                Integer b = (Integer) arg1;
                int temp = Integer.compare(a, b);
                return -temp;
            }
        });
        for (int a : arr) {
            System.out.println(a + "\t");
        }
    }

    /**
     * 15.使用Arrays对象将一个数组转换为List对象，并注意转换出来的List对象有何限制？如何解决此限制？
     * 16.直接在里面
     * 17.直接在里面
     */
    public static void Arrayschengelist()
    {
        String[] words = {"ace", "boom", "crew", "dog", "eon"};

        List<String> wordList = Arrays.asList(words);

        for (String e : wordList)
        {
            System.out.println(e);
        }
//16.	使用Arrays拷贝数组元素
        int [] array=new int[]{0,0,1,1};
        int[] copy = Arrays.copyOf(array, array.length);
         for (int as:copy)
         {
             System.out.println(as);
         }
//17.	使用System拷贝数组元素
             System.arraycopy(array,0,copy,0,4);
        for (int as:copy)
        {
            System.out.println(as);
        }

    }






    }
